import java.util.*;

public class demo {
    // 数组中出现次数超过一半的数字  也可以使用map来完成
//给一个长度为 n 的数组，数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。
//例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次，超过数组长度的一半，因此输出2。
//    输入描述:
//保证数组输入非空，且保证有解
    public static int MoreThanHalfNum_Solution(int[] arr) {
        if (arr == null || arr.length == 0) {
            System.out.println("数组为空");
            return -1;
        }
        Arrays.sort(arr);
        int ret = arr[arr.length/2];
//        判断ret是否符合条件，即出现次数大于数组长度的一半
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (ret == arr[i]) {
                count++;
            }
        }
        return count>arr.length/2? ret : 0 ;
    }



    // 简单错误记录▲▲▲
//    注意理解
//开发一个简单错误记录功能小模块，能够记录出错的代码所在的文件名称和行号。
//处理：
//1、 记录最多8条错误记录，循环记录，最后只用输出最后出现的八条错误记录。对相同的错误记录只记录一条，但是错误计数增加。
//最后一个斜杠后面的带后缀名的部分（保留最后16位）和行号完全匹配的记录才做算是“相同”的错误记录。
//2、 超过16个字符的文件名称，只记录文件的最后有效16个字符；
//3、 输入的文件可能带路径，记录文件名称不能带路径。也就是说，哪怕不同路径下的文件，如果它们的名字的后16个字符相同，也被视为相同的错误记录
//4、循环记录时，只以第一次出现的顺序为准，后面重复的不会更新它的出现时间，仍以第一次为准
//
//  输入描述:
//每组只包含一个测试用例。一个测试用例包含一行或多行字符串。每行包括带路径文件名称，行号，以空格隔开。    注意是一个测试用例
//  输出描述:
//将所有的记录统计并将结果输出，格式：文件名 代码行数 数目，一个空格隔开


    //        输入
//      D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645
//      E:\je\rzuwnjvnuz 633
//      C:\km\tgjwpb\gy\atl 637
//      F:\weioj\hadd\connsh\rwyfvzsopsuiqjnr 647
//      E:\ns\mfwj\wqkoki\eez 648
//      D:\cfmwafhhgeyawnool 649
//      E:\czt\opwip\osnll\c 637
//      G:\nt\f 633
//      F:\fop\ywzqaop 631
//      F:\yay\jc\ywzqaop 631
//      D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645
//        输出
//      rzuwnjvnuz 633 1
//      atl 637 1
//      rwyfvzsopsuiqjnr 647 1
//      eez 648 1
//      fmwafhhgeyawnool 649 1
//      c 637 1
//      f 633 1
//      ywzqaop 631 2
//        说明
//      由于D:\cfmwafhhgeyawnool 649的文件名长度超过了16个字符，达到了17，所以第一个字符'c'应该被忽略。
//      记录F:\fop\ywzqaop 631和F:\yay\jc\ywzqaop 631由于文件名和行号相同，因此被视为同一个错误记录，哪怕它们的路径是不同的。
//      由于循环记录时，只以第一次出现的顺序为准，后面重复的不会更新它的出现时间，仍以第一次为准，
//      所以D:\zwtymj\xccb\ljj\cqzlyaszjvlsjmkwoqijggmybr 645不会被记录。
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 因为是一个测试用例 我们可以将map和list 创建到循环外面 里面接收每行的数据
        Map<String,Integer> map = new HashMap<>();
        List<String> list = new ArrayList<>();
        while (sc.hasNext()) {
            // 路径
            String path = sc.next();
            // 行号
            int count = sc.nextInt();
            // 用\分割 字符串  这里要使用4个\ 表示 一个\     理解转义字符
            String[] arr = path.split("\\\\");
            // 取最后一个反斜杠的内容
            String str = arr[arr.length-1];
            // 判断内容是否有超过16  如果超过16 就要截取内容的后16个字符
            if (str.length() > 16) {
                str = str.substring(str.length()-16);
            }
            // 因为输出格式我们还要加上 " " 行号
            str = str + " " + count;

            // 将str保存在map中
            if (!map.containsKey(str)) {
                map.put(str,1);
                list.add(str);
            }else {
                map.put(str,map.get(str)+1);
            }

        }

        // 打印结果 要在循环外面
        int start = 0;
        if (list.size() > 8) {
            start = list.size() - 8;
        }
        for (int i=start; i<list.size(); i++) {
            System.out.println(list.get(i) + " " + map.get(list.get(i)));
        }
    }
}
